#ifndef MODEL_H_
#define MODEL_H_

// C/C++ Interaction
#ifdef __cplusplus
extern "C" {
#endif

/**
 * Tree Base
 */

void* getTreeBase();
void setTreeBase(void* base);

/**
 * Factory Members
 */

void* createPhi();
void* createTheta();
void* createDecimal(double value);

void* createPlus(void* left, void* right);
void* createMinus(void* left, void* right);
void* createDivide(void* left, void* right);
void* createMultiply(void* left, void* right);
void* createPow(void* left, void* right);

void* createLn(void* expression);
void* createCos(void* expression);
void* createSin(void* expression);
void* createLog(void* expression);

/**
 * Variables
 */

void* getTheta();
unsigned int getThetaStep();
void setThetaStep(double stepExpression);

void* getPhi();
unsigned int getPhiStep();
void setPhiStep(double stepEpression);

#ifdef __cplusplus
}
#endif

#endif /* MODEL_H_ */
